package com.zp.self.module.level_4_算法练习.数据结构.String;

class 力扣_58_最后一个单词的长度 {

    public static void main(String[] args) {
        System.out.println(new 力扣_58_最后一个单词的长度().lengthOfLastWord2("Hello World"));
        System.out.println(new 力扣_58_最后一个单词的长度().lengthOfLastWord2("   fly me   to   the moon  "));
        System.out.println(new 力扣_58_最后一个单词的长度().lengthOfLastWord2("luffy is still joyboy"));
        System.out.println(new 力扣_58_最后一个单词的长度().lengthOfLastWord2("luff"));

    }
    /**
     题目：给你一个字符串 s，由若干单词组成，单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。
     单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。

     示例 1：
     输入：s = "Hello World"
     输出：5

     示例 2：
     输入：s = "   fly me   to   the moon  "
     输出：4

     示例 3：
     输入：s = "luffy is still joyboy"
     输出：6

     分析：
     1. 从后向前遍历，判断是否是空格，变量记录字符长度++

     边界值 & 注意点：
     1.
     **/
    //太复杂了
    public int lengthOfLastWord(String s) {
        int start = 0;
        for (int i = s.length()-1; i >=0; i--) {
            //注意特殊情况处理
            //1.全单词字符串
            //从后向前遍历，遇到字符串时标记开始strt = i
            if(s.charAt(i)!= ' ' && (start==0)){ //不是字符 且 还未开始，记录起点
                start = i;
            }
            if(s.charAt(i)== ' ' && start!=0 ){//碰到空格推出
                return  start-i;
            }
        }
        return start+1;//最后一位s.charAt(i),仍然未找到空格
    }
    //优化 ：变量记录字符个数
    public int lengthOfLastWord2(String s) {
        int length = 0;
        for (int i = s.length()-1; i >=0; i--) {
            //注意特殊情况处理
            //1.全单词字符串
            //从后向前遍历，遇到字符串时标记开始lenth ++
            if(s.charAt(i)!= ' '){ //是字符lenth ++
                length++;
            }else  if(length!=0){//是空格 ，判断遇到过字符没
                return  length;
            }
        }
        return length;//最后一位s.charAt(i),仍然未找到空格
    }
}